#include "ModuleOpScalar.h"

void ModuleOpScalar::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
  layout=new QVBoxLayout(win);
	cb_op=new QComboBox(win);
	cb_op->addItem("*");
	cb_op->addItem("/");

	sb_scalar=new QDoubleSpinBox(win);
	sb_scalar->setPrefix("Scalaire=");

	layout->addWidget(cb_op);
	layout->addWidget(sb_scalar);
	sb_scalar->setRange(-65536.0,65536.0);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleOpScalar::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleOpScalar::process()
{
	if(!img.empty())
	{
		if(cb_op->currentIndex()==0)
		{
			result=img*sb_scalar->value();
		}
		else if(cb_op->currentIndex()==1 && sb_scalar->value()!=0.0)
		{
			result=img/sb_scalar->value();
		}
	}
	else
	{
		std::cout<<"Erreur ModuleOpScalar: pas d'image \n";
	}
	

	return result;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleOpScalar::setInput(int n,const cv::Mat & m)
{
	if(n==0)
	{	
		m.convertTo(img,CV_32F,1.0/255.0);
	}
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleOpScalar::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleOpScalar::getName()
{
	return trUtf8("Opération Scalaire");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleOpScalar::nbInputs()
{
	return 1;
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleOpScalar::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==1)
	{
		return true;
	}
	else
	{
		return false;
	}	
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleOpScalar::getParams()
{
	return tr("no_param");
}

////////////////////////////////////////////////////////////////////////////////
QCVModuleInterface * ModuleOpScalar::clone()
{
	return new ModuleOpScalar;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleOpScalar::help(int id)
{
	if(id==-2)
	{
		return trUtf8("Permet de réaliser une opération scalaire basique / * sortie de type floatant");
	}
	else if(id==-1)
	{
		return tr("image");
	}
	else if(id==0)
	{
		return tr("image");
	}
	else if(id==1)
	{
		return tr("image");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleOpScalar_plugin,ModuleOpScalar);  
